<?php

namespace Unl\HomologacionBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Unl\HomologacionBundle\Entity\PeticionHomologacion;
use Unl\HomologacionBundle\Form\PeticionHomologacionType;
use Unl\HomologacionBundle\Form\HomologacionType;
use Unl\HomologacionBundle\Form\AsignarPeticionHomologacionType;
use Symfony\Component\HttpFoundation\Response;
use Unl\HomologacionBundle\Entity\Persona;
use Unl\HomologacionBundle\Entity\Universidad;
use Unl\HomologacionBundle\Entity\Carrera;
use Unl\HomologacionBundle\Form\PersonaType;
use \Unl\HomologacionBundle\Form\ProcesarHomologacionType;

/**
 * PeticionHomologacion controller.
 *
 * @Route("/peticionhomologacion")
 */
class PeticionHomologacionController extends BaseController {

    /**
     * Finds and displays a PeticionHomologacion entity.
     *
     * @Route("/notificarDocente", name="peticionhomologacion_notificarDocente")
     * @Template()
     */
//    private function notificarDocenteAction($email) {
//
//        $emailDocente = $email;
//        $message = \Swift_Message::newInstance()     // we create a new instance of the Swift_Message class
//                ->setSubject('Hello Email')     // we configure the title
//                ->setFrom('shomologa@gmail.com')     // we configure the sender
//                ->setTo($emailDocente)     // we configure the recipient
//                ->setCc($emailDocente)
//                //->setBody($this->renderView('UnlHomologacionBundle:PeticionHomologacion:email.txt.twig', array('name' => $name)))
//                ->setBody('TIENE UNA NUEVA HOMOLOGACION PENDIENTE')
//        // and we pass the $name variable to the text template which serves as a body of the message
//
//        ;
//
//        $this->get('mailer')->send($message);     // then we send the message.
//        return false;
////        $response = 'Correo enviado ';
////        return new Response($response);
//    }

    /**
     * Lists all PeticionHomologacion entities.
     *
     * @Route("/", name="peticionhomologacion")
     * @Template()
     */
    public function indexAction() {
        $estudiante = new Persona();
        $estudiante->setNombre('');
        $estudiante->setApellido('');
        $estudiante->setCedula('');

        $searchForm = $this->createForm(new PersonaType(), $estudiante);
        $request = $this->getRequest();
        $searchForm->bindRequest($request);

        $em = $this->getDoctrine()->getEntityManager();

        $usuario = $this->container->get('security.context')->getToken()->getUser();

        if ($usuario->tieneRol('ROLE_SECRETARIA')) {
            if ($estudiante->getNombre() == '') {
                $entities = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->findAllByCriterio($estudiante->getCedula());
            } else {
                $entities = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->findAllByCriterio($estudiante->getNombre());
            }
        } else if ($usuario->tieneRol('ROLE_DOCENTE')) {
            if ($estudiante->getNombre() == '') {
                $entities = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->encontrarPorCriterioYDocente($estudiante->getCedula(), $usuario->getPersona()->getId());
//                    $entities = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->encontrarPorCriterioYDocente($estudiante->getCedula(), $estudiante->getId());
            } else {
                $entities = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->encontrarPorCriterioYDocente($estudiante->getNombre(), $usuario->getPersona()->getId());
//                       $entities = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->encontrarPorCriterioYDocente($estudiante->getNombre(), $estudiante->getId() );
            }
        } else if ($usuario->tieneRol('ROLE_ESTUDIANTE')) {
            if ($estudiante->getNombre() == '') {
                $entities = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->encontrarPorCriterioYEstudiante($estudiante->getCedula(), $usuario->getPersona()->getId());
            } else {
                $entities = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->encontrarPorCriterioYEstudiante($estudiante->getNombre(), $usuario->getPersona()->getId());
            }
        }

        return array('entities' => $entities,
            'search_form' => $searchForm->createView(),
        );
    }

    /**
     * Finds and displays a PeticionHomologacion entity.
     *
     * @Route("/{id}/show", name="peticionhomologacion_show")
     * @Template()
     */
    public function showAction($id) {
        $em = $this->getDoctrine()->getEntityManager();

        $entity = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find PeticionHomologacion entity.');
        }

        $deleteForm = $this->createDeleteForm($id);

        return array(
            'entity' => $entity,
            'delete_form' => $deleteForm->createView(),);
    }

    /**
     * Finds and displays a PeticionHomologacion entity.
     *
     * @Route("/{id}/consultar", name="peticionhomologacion_consultar")
     * @Template()
     */
    public function consultarAction($id) {
        $em = $this->getDoctrine()->getEntityManager();

        $entity = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find PeticionHomologacion entity.');
        }

        $consultarPeticionHomologacionType = new \Unl\HomologacionBundle\Form\ConsultarPeticionHomologacionType();

        $consultarForm = $this->createForm($consultarPeticionHomologacionType, $entity);


        return array(
            'entity' => $entity,
            'consultar_form' => $consultarForm->createView(),);
    }

    /**
     * Displays a form to create a new PeticionHomologacion entity.
     *
     * @Route("/new", name="peticionhomologacion_new")
     * @Template()
     */
    public function newAction() {
        $entity = new PeticionHomologacion();

        $em = $this->getDoctrine()->getEntityManager();
        $usuario = $this->container->get('security.context')->getToken()->getUser();

        if ($usuario->tieneRol('ROLE_ESTUDIANTE')) {
            $estudiante = $em->getRepository('UnlHomologacionBundle:Persona')->find($usuario->getPersona()->getId());
            $entity->setEstudiante($estudiante);
        }

        $form = $this->createForm(new PeticionHomologacionType(), $entity);

        return array(
            'entity' => $entity,
            'edit_form' => $form->createView()
        );
    }

    /**
     * Creates a new PeticionHomologacion entity.
     *
     * @Route("/create", name="peticionhomologacion_create")
     * @Method("post")
     * @Template("UnlHomologacionBundle:PeticionHomologacion:new.html.twig")
     */
    public function createAction() {
        $entity = new PeticionHomologacion();
        $request = $this->getRequest();

        $em = $this->getDoctrine()->getEntityManager();
        $estado = $em->getRepository('UnlHomologacionBundle:Estado')->find(1);

        $usuario = $this->container->get('security.context')->getToken()->getUser();
        
        $fecha = new \DateTime(date('Y-m-d H:i:s'));
        $registroProceso = new \Unl\HomologacionBundle\Entity\RegistroProceso();
        $registroProceso->setEstado($estado);
        $registroProceso->setFecha($fecha);
        $registroProceso->setPeticionHomologacion($entity);
        $entity->addRegistroProceso($registroProceso);
        $entity->setEstadoActual($registroProceso);
        $entity->setArchivado(FALSE);

        $form = $this->createForm(new PeticionHomologacionType(), $entity);
        $form->bindRequest($request);
       
        
//    SI LA UNIVERSIDAD Y CARRERA ELEGIDA ES OTRA SE CREA UNA NUEVA UNIVERSIDAD Y CARRERA CON LOS DATOS INGRESADOS                

        if($entity->getUniversidad()->getNombre() == 'Otra'){
            $universidad=new Universidad();
            $universidad->setCodigo(000);
            $universidad->setNombre($entity->getUniversidadOrigen());
            $universidad->setDescription($entity->getUniversidadOrigen());
            
            $carrera = new Carrera();
            $carrera->setCodigo(000);
            $carrera->setNombre($entity->getCarreraOrigen());
            $carrera->setUniversidad($universidad);
            
            $em->persist($universidad);
            $em->persist($carrera);
        }
        
        if($entity->getUniversidad()->getNombre() != 'Elija universidad'){
            

            if ($form->isValid()) {
    //    PARA CREAR UNA NUEVA PETICION CON EL ROL DE ESTUDIANTE        
                if($usuario->tieneRol('ROLE_ESTUDIANTE')){        
                    $estudiante=$em->getRepository('UnlHomologacionBundle:Persona')->find($usuario->getPersona()->getId());
                    $entity->setEstudiante($estudiante);
                    $username=$usuario->getUserName();
                    $entity->getEstudiante()->getUsuario()->setUserName($username);
                }

    //   PARA CREAR UNA NUEVA PETICION CON EL ROL DE SECRETARIA         
                $entity->getEstudiante()->getUsuario()->setEnabled(true);
                $em = $this->getDoctrine()->getEntityManager();
                $em->persist($entity);
                $em->flush();

                return $this->redirect($this->generateUrl('peticionhomologacion', array('id' => $entity->getId())));
            }

            
        }

        return array(
            'entity' => $entity,
            'edit_form' => $form->createView()
        );
    }

    /**
     * Displays a form to edit an existing PeticionHomologacion entity.
     *
     * @Route("/{id}/edit", name="peticionhomologacion_edit")
     * @Template()
     */
    public function editAction($id) {
        $em = $this->getDoctrine()->getEntityManager();

        $entity = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->find($id);


        if (!$entity) {
            throw $this->createNotFoundException('Unable to find PeticionHomologacion entity.');
        }

        $peticionHomologacionType = new PeticionHomologacionType();
        // $peticionHomologacionType->setCarreras($carreras);
        $editForm = $this->createForm($peticionHomologacionType, $entity);
        //$deleteForm = $this->createDeleteForm($id);

        return array(
            'entity' => $entity,
            'edit_form' => $editForm->createView(),

        );
    }

    /**
     * Displays a form to edit an existing PeticionHomologacion entity.
     *
     * @Route("/{id}/asignar", name="peticionhomologacion_asignar")
     * @Template()
     */
    public function asignarAction($id) {
        $em = $this->getDoctrine()->getEntityManager();

        $entity = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->find($id);


        if (!$entity) {
            throw $this->createNotFoundException('Unable to find PeticionHomologacion entity.');
        }

        $asignarPeticionHomologacionType = new AsignarPeticionHomologacionType();

        $asignarForm = $this->createForm($asignarPeticionHomologacionType, $entity);


        return array(
            'entity' => $entity,
            'asignar_form' => $asignarForm->createView(),
        );
    }

//    FUNCION PARA OBTENER LAS UNIDADES SEGUN EL MODULO DE LA MALLA CURRICULAR
    private function obtenerUnidades($mallaCurricularId, $numeroModulo) {
        $em = $this->getDoctrine()->getEntityManager();
        $query = $em->createQuery('SELECT u FROM UnlHomologacionBundle:Unidad u ' .
                ' JOIN u.modulo m ' .
                ' JOIN m.mallaCurricular mc ' .
                'WHERE mc.id = :id ' .
                ' AND m.numeroModulo = :numeroModulo ' .
                'ORDER BY u.id ASC');
        $query->setParameter('id', $mallaCurricularId);
        $query->setParameter('numeroModulo', $numeroModulo);
        $unidades = $query->getResult();
        return $unidades;
    }

//    FUNCION PARA SACAR LOS ARTICULOS DEL TEMA Y COMPARAR SOLO TEMA

    private function esArticulo($palabra) {
        $articulos = array("de", "el", "la", "los", "las", "un", "y", "e", "las", "del", "al", "en", "a", "o", "para", "entre","por");
        foreach ($articulos as $articulo) {
            if (strpos($palabra, $articulo) !== false) {
                return true;
            }
        }
        return false;
    }

//    FUNCION PARA VERIFICAR SI SON IGUALES LOS TEMAS SACANDO TODOS LOS ARTICULOS DEL TEMA.

    private function contiene($origen, $destino, $temasAdicionales) {

        $origen = strtolower($origen);
        $destino = strtolower($destino);
        $arregloTemasAdicionales = preg_split("/[\s,]+/", $temasAdicionales);
        $arregloDestino = preg_split("/[\s[,|.|:]]+/", $destino);
        $arregloOrigen = preg_split("/[\s[,|.|:]]+/", $origen);

        foreach ($arregloDestino as $palabraDestino) {
            foreach ($arregloOrigen as $palabraOrigen) {
                if ($this->esArticulo($palabraDestino) && $this->esArticulo($palabraOrigen)) {
                    if (strpos($palabraOrigen, $palabraDestino) !== false) {
                        return true;
                    }
                }
            }

            foreach ($arregloTemasAdicionales as $palabraOrigen) {
                if (strpos($palabraOrigen, $palabraDestino) !== false) {
                    return true;
                }
            }
        }

        return false;
    }

//   FUNCION PARA REALIZAR SI REALIZAR EL CONTERO DE LOS TEMAS QUE COINCIDEN 

    private function calcularPorcentaje($temasUnidadOrigen, $temasUnidadDestino, $temasAdicionales, &$response) {
        set_time_limit(60);
        $matches = 0;
        foreach ($temasUnidadDestino as $temaDestino) {
            $destino = $temaDestino->getNombre();

            foreach ($temasUnidadOrigen as $temaOrigen) {
                $response = $response . ' comparando ' . $temaOrigen . ' contra ' . $temaDestino . '<br>';
                $origen = $temaOrigen->getNombre();
                $contiene = $this->contiene($origen, $destino, $temasAdicionales);
                if ($contiene) {
                    $matches++;
                    break;
                }
            }
        }

        $porcentaje = 0;
        if ($temasUnidadOrigen->count() > 0) {
            $porcentaje = $matches * 100 / count($temasUnidadDestino);
        }
        return $porcentaje;
    }

// ALGORITMO PARA REALIZAR LA HOMOLOGACION

    /**
     * Displays a form to edit an existing PeticionHomologacion entity.
     *
     * @Route("/{id}/procesarHomologacion", name="peticionhomologacion_procesarHomologacion")
     * @Template()
     */
    public function procesarHomologacionAction($id) {
        $em = $this->getDoctrine()->getEntityManager();
        $peticion = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->find($id);
        $idMallaDestino = $peticion->getMallaDestino()->getId();

        $response = '';
        $porcentajeModulo = 0;
        $acumuladoModulo = 0;

        for ($numeroModulo = 1; $numeroModulo <= $peticion->getNumeroModulo(); ++$numeroModulo) {
            $unidadesDestino = $this->obtenerUnidades($idMallaDestino, $numeroModulo);
//            $response = $response  . 'Tipo de dato ' . count($unidadesDestino). '  '.$numeroModulo;
            $puedeHomologar = true;


            foreach ($unidadesDestino as $unidadDestino) {
                $temasUnidadDestino = $unidadDestino->getTemas();
                $porcentajeMayor = 0;

                foreach ($peticion->getRegistrosHomologacion() as $registroHomologacion) {

                    if ($registroHomologacion->getUnidadDestino() === null || $registroHomologacion->getPorcentajeCumplimiento() < 80) {

                        $unidadOrigen = $registroHomologacion->getUnidadOrigen();
                        $temasUnidadOrigen = $unidadOrigen->getTemas();
                        $porcentajeCumplimiento = $this->calcularPorcentaje($temasUnidadOrigen, $temasUnidadDestino, $registroHomologacion->getTema(), $response);

                        if ($porcentajeCumplimiento >= 80) {
                            $registroHomologacion->setUnidadDestino($unidadDestino);
                            $registroHomologacion->setPorcentajeCumplimiento($porcentajeCumplimiento);
                            //$porcentajeMayor = $porcentajeCumplimiento;
//                            $response = $response . 'Homologando ' . $registroHomologacion->getUnidadOrigen() . ' contra ' . $registroHomologacion->getUnidadDestino() . ' - ';
//                            $response = $response . 'Porcentaje cumplimiento ' . $registroHomologacion->getPorcentajeCumplimiento() . '<br>';

                            break;
                        } else {
                            if ($porcentajeCumplimiento > $porcentajeMayor) {
                                $porcentajeMayor = $porcentajeCumplimiento;
                                $registroHomologacion->setUnidadDestino($unidadDestino);
                                $registroHomologacion->setPorcentajeCumplimiento($porcentajeCumplimiento);
//                                $response = $response . 'Homologando ' . $registroHomologacion->getUnidadOrigen() . ' contra ' . $registroHomologacion->getUnidadDestino() . ' - ';
//                                $response = $response . 'Porcentaje cumplimiento ' . $registroHomologacion->getPorcentajeCumplimiento() . '<br>';
                            }
                        }
                    }
                }


                $porcentajeCumplimiento = $porcentajeMayor;
                if (!$puedeHomologar && $unidadDestino->getEsObligatoria() && $porcentajeMayor < 80) {
                    $puedeHomologar = false;
                }
            }

            $acumuladoModulo = 0;

            foreach ($peticion->getRegistrosHomologacion() as $registroHomologacion) {
                $acumuladoModulo = $acumuladoModulo + $registroHomologacion->getPorcentajeCumplimiento();
            }


            if ($porcentajeModulo == 0) {
                $porcentajeModulo = $acumuladoModulo / count($unidadesDestino);
                $porModu = $acumuladoModulo;
            } else {
                $porModu = $acumuladoModulo - $porModu;
                $porcentajeModulo = $porModu / count($unidadesDestino);
                $porModu = $acumuladoModulo;
            }


            if ($puedeHomologar) {
                if ($porcentajeModulo >= 80) {
                    $peticion->setNivelHomologado($numeroModulo);
                } else {
                    $peticion->setNivelHomologado($numeroModulo);
                    break;
                }
            } else {
                $peticion->setNivelHomologado(0);
                break;
            }
        }

        foreach ($peticion->getRegistrosHomologacion() as $registroHomologacion) {
            if ($registroHomologacion->getUnidadDestino() === null) {
                $peticion->getRegistrosHomologacion()->removeElement($registroHomologacion);
            }
        }

        $entity = $peticion;
        $em->persist($entity);
        $em->flush();
        
        
        if($peticion->getFinalizado()== null){
            $procesarHomologacionForm = $this->createForm(new ProcesarHomologacionType(), $entity);
        }
        else{
            $procesarHomologacion=new ProcesarHomologacionType();
            $procesarHomologacion->setOcultaResumen(TRUE);
            $procesarHomologacionForm = $this->createForm($procesarHomologacion, $entity);
        }


        
        return array(
            'entity' => $entity,
            'procesarHomologacion_form' => $procesarHomologacionForm->createView(),
        );
    }

    /**
     * Displays a form to edit an existing PeticionHomologacion entity.
     *
     * @Route("/{id}/homologar", name="peticionhomologacion_homologar")
     * @Template()
     */
    public function homologarAction($id) {
        //return $this->update($id, new HomologacionType());

        $em = $this->getDoctrine()->getEntityManager();

        $entity = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->find($id);


        if (!$entity) {
            throw $this->createNotFoundException('Unable to find PeticionHomologacion entity.');
        }

        $homologarPeticionHomologacionType = new \Unl\HomologacionBundle\Form\HomologacionType();

        $homologarForm = $this->createForm($homologarPeticionHomologacionType, $entity);

        return array(
            'entity' => $entity,
            'homologar_form' => $homologarForm->createView(),
        );
    }
    
    
    /**
     * Edits an existing PeticionHomologacion entity.
     *
     * @Route("/{id}/updateHomologar", name="peticionhomologacion_updateHomologar")
     * @Method("post")
     * @Template("UnlHomologacionBundle:PeticionHomologacion:homologar.html.twig")
     */
    public function updateHomologarAction($id) {
        //return $this->update($id, new AsignarPeticionHomologacionType());

        $em = $this->getDoctrine()->getEntityManager();

        $entity = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->find($id);

        $numeroOficio = $entity->getNumeroOficio();
        $carrera = $entity->getCarrera();
        $userName = $entity->getEstudiante()->getUsuario()->getUserName();

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find PeticionHomologacion entity.');
        }

        $homologarForm = $this->createForm(new HomologacionType(), $entity);

        $request = $this->getRequest();

        $homologarForm->bindRequest($request);

// SE RECUPERA LAS UNIDADES DE LA BASE DE DATOS SEGUN LA MALLA CURRICULAR ORIGEN
        $unidades = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->encontrarPorMallaCurricularId($entity->getMallaOrigen()->getId());

        $cont=0;
        $cont1=0;
        foreach ($entity->getRegistrosHomologacion() as $registroHomologacion) {
           
            foreach ($unidades as $unidad) {
               if($cont == $cont1){ 
                  $registroHomologacion->setUnidadOrigen($unidad);
                  break;
               }
               $cont++;
            }
            $cont1++;
            $cont=0;
            $registroHomologacion->setPeticionHomologacion($entity);
        }

        $entity->setNumeroOficio($numeroOficio);
        $entity->setCarrera($carrera);
        $entity->getEstudiante()->getUsuario()->setUserName($userName);
        $entity->getEstudiante()->getUsuario()->setEnabled(true);
        $entity->setGuardada(true);

        $em->persist($entity);
        $em->flush();
        
        return $this->redirect($this->generateUrl('peticionhomologacion_homologar', array('id' => $id)));
  
        return array(
            'entity' => $entity,
            'homologar_form' => $homologarForm->createView(),
        );
    }

    /**
     * Edits an existing PeticionHomologacion entity.
     *
     * @Route("/{id}/updateProcesarHomologacion", name="peticionhomologacion_updateProcesarHomologacion")
     * @Method("post")
     * @Template("UnlHomologacionBundle:PeticionHomologacion:homologar.html.twig")
     */
    public function updateProcesarHomologacionAction($id) {

        $em = $this->getDoctrine()->getEntityManager();

        $peticion = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->find($id);

        if (!$peticion) {
            throw $this->createNotFoundException('Unable to find PeticionHomologacion entity.');
        }

        $fake = new PeticionHomologacion();
        $type = new ProcesarHomologacionType();
        $type->setOcultaResumen(FALSE);
        
        $form = $this->createForm($type, $fake);
        $request = $this->getRequest();
        $form->bindRequest($request);
        $resumen = $fake->getResumen();
        
        $estado = $em->getRepository('UnlHomologacionBundle:Estado')->find(3);
        $fecha = new \DateTime(date('Y-m-d H:i:s'));
        $registroProceso = new \Unl\HomologacionBundle\Entity\RegistroProceso();
        $registroProceso->setEstado($estado);
        $registroProceso->setFecha($fecha);
        $registroProceso->setPeticionHomologacion($peticion);
        $peticion->addRegistroProceso($registroProceso);
        $peticion->setEstadoActual($registroProceso);
        $peticion->setFinalizado(true);
        $peticion->setResumen($resumen);
        
        $em->persist($peticion);
        $em->flush();
        
        return $this->redirect($this->generateUrl('peticionhomologacion', array('id' => $id)));
    }

    /**
     * Edits an existing PeticionHomologacion entity.
     *
     * @Route("/{id}/updateAsignar", name="peticionhomologacion_updateAsignar")
     * @Method("post")
     * @Template("UnlHomologacionBundle:PeticionHomologacion:asignar.html.twig")
     */
    public function updateAsignarAction($id) {

        $em = $this->getDoctrine()->getEntityManager();

        $entity = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find PeticionHomologacion entity.');
        }

        $estado = $em->getRepository('UnlHomologacionBundle:Estado')->find(2);

        $fecha = new \DateTime(date('Y-m-d H:i:s'));
        $registroProceso = new \Unl\HomologacionBundle\Entity\RegistroProceso();
        $registroProceso->setEstado($estado);
        $registroProceso->setFecha($fecha);
        $registroProceso->setPeticionHomologacion($entity);
        $entity->addRegistroProceso($registroProceso);
        $entity->setEstadoActual($registroProceso);

        $userName = $entity->getEstudiante()->getUsuario()->getUserName();
        $universidadOrigen = $entity->getUniversidad();
        $carrera = $entity->getCarrera();
        $carreraDestino = $entity->getCarreraDestino();


        $asignarForm = $this->createForm(new AsignarPeticionHomologacionType(), $entity);

        $request = $this->getRequest();

        $asignarForm->bindRequest($request);
        

        if($entity->getNumeroOficio()!=null){
            
            $email = $entity->getDocente()->getUsuario()->getEmail();
            $asunto='Homologacion';
            $cuerpo='TIENE UNA NUEVA HOMOLOGACION PENDIENTE';
            $this->enviarCorreo($email, $asunto, $cuerpo);
            
            
               if ($asignarForm->isValid()) {

                $entity->setUniversidad($universidadOrigen);
                $entity->setCarrera($carrera);
                $entity->setCarreraDestino($carreraDestino);


                $entity->getEstudiante()->getUsuario()->setUserName($userName);
                $entity->getEstudiante()->getUsuario()->setEnabled(true);
                $em->persist($entity);
                $em->flush();

                return $this->redirect($this->generateUrl('peticionhomologacion', array('id' => $id)));
              }
              
        } else{
            throw $this->createNotFoundException('Ingresar Numero de Oficio');
        }

        
        return array(
            'entity' => $entity,
            'asignar_form' => $asignarForm->createView(),
        );
    }

    /**
     * Edits an existing PeticionHomologacion entity.
     *
     * @Route("/{id}/update", name="peticionhomologacion_update")
     * @Method("post")
     * @Template("UnlHomologacionBundle:PeticionHomologacion:edit.html.twig")
     */
    public function updateAction($id) {
        return $this->update($id, new PeticionHomologacionType());
    }

    public function update($id, $formType) {

        $em = $this->getDoctrine()->getEntityManager();

        $entity = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find PeticionHomologacion entity.');
        }

        $userName = $entity->getEstudiante()->getUsuario()->getUserName();

        $editForm = $this->createForm($formType, $entity);

        $request = $this->getRequest();

        $editForm->bindRequest($request);
        
        if($entity->getUniversidad()->getNombre() != 'Elija universidad'){
            if ($editForm->isValid()) {
                $entity->getEstudiante()->getUsuario()->setUserName($userName);
                $entity->getEstudiante()->getUsuario()->setEnabled(true);
                $em->persist($entity);
                $em->flush();

                return $this->redirect($this->generateUrl('peticionhomologacion', array('id' => $id)));
            }
            
        }


        return array(
            'entity' => $entity,
            'edit_form' => $editForm->createView(),
         );
    }

    /**
     * Deletes a PeticionHomologacion entity.
     *
     * @Route("/{id}/delete", name="peticionhomologacion_delete")
     * @Method("post")
     */
    public function deleteAction($id) {
        $form = $this->createDeleteForm($id);
        $request = $this->getRequest();

        $form->bindRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getEntityManager();
            $entity = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->find($id);

            if (!$entity) {
                throw $this->createNotFoundException('Unable to find PeticionHomologacion entity.');
            }
            
            $entity->setArchivado(TRUE);

//            $em->remove($entity);
            $em->flush();
        }

        return $this->redirect($this->generateUrl('peticionhomologacion'));
    }

    private function createDeleteForm($id) {
        return $this->createFormBuilder(array('id' => $id))
                        ->add('id', 'hidden')
                        ->getForm()
        ;
    }

    private function setDocumentInformation($pdf) {
        // set document information
        $pdf->SetCreator(PDF_CREATOR);
        $pdf->SetAuthor('Homologa UNL');
        $pdf->SetTitle('Reporte de hiomologación');
        $pdf->SetSubject('Resultado de solicitud de homologación');
        $pdf->SetKeywords('PDF, homologacion');

        // remove default header/footer
        $pdf->setPrintHeader(false);
        $pdf->setPrintFooter(false);

        // set default monospaced font
        $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

        //set margins
        $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);

        //set auto page breaks
        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

        //set image scale factor
        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
        // set font
        $pdf->SetFont('times', 'B', 20);
    }

    private function setDatosUser($pdf, $peticionHomologacion) {

        $cedula = $peticionHomologacion->getEstudiante()->getCedula();
        $nombre = $peticionHomologacion->getEstudiante()->getNombre();
        $apellido = $peticionHomologacion->getEstudiante()->getApellido();
        $carreraOrigen = $peticionHomologacion->getMallaOrigen()->getCarrera()->getNombre();
        $carreraDestino = $peticionHomologacion->getMallaDestino()->getCarrera()->getNombre();
        $resumen = $peticionHomologacion->getResumen();

        $pdf->SetFont('times', 'B', 12);
        $pdf->cell($h = 10, $w = 5, 'Cedula: ' . $cedula, $border = 0, $ln = 1, $align = 'L', $fill = FALSE);
        $pdf->cell($h = 10, $w = 5, 'Nombre: ' . $nombre, $border = 0, $ln = 2, $align = 'L', $fill = FALSE);
        $pdf->cell($h = 10, $w = 5, 'Apellido: ' . $apellido, $border = 0, $ln = 2, $align = 'L', $fill = FALSE);
        $pdf->cell($h = 10, $w = 5, 'Carrera Procedencia: ' . $carreraOrigen, $border = 0, $ln = 1, $align = 'L', $fill = FALSE);
        $pdf->cell($h = 10, $w = 5, 'Carrera a ser Admitido: ' . $carreraDestino, $border = 0, $ln = 1, $align = 'L', $fill = FALSE);

        $pdf->MultiCell(0, 5, 'Resumen:  '.$resumen."\n", 1, '', 0, 1, '', '', true);
        $pdf->ln(5);
        
        
//        $pdf->cell($h = 10, $w = 5, 'Resultado: '. $resumen, $border = 0, $ln = 2, $aling = 'L', $fill = FALSE);
    }

    private function setDatosTablaResultado($pdf, $peticionHomologacion) {
        $w = array(70, 70, 20, 20, 20, 20, 50);
        $fill = 0;
        $moduloActual = 0;
        $escalaMaxima = $peticionHomologacion->getEscalaMaxima();
        foreach ($peticionHomologacion->getRegistrosHomologacion() as $registroHomologacion) {
            $unidadDestino = $registroHomologacion->getUnidadDestino();
            $unidadOrigen = $registroHomologacion->getUnidadOrigen();
            if ($registroHomologacion->getUnidadDestino() !== null) {
                $modulo = $unidadDestino !== null ? $unidadDestino->getModulo()->getNumeroModulo() : '';
                if ($moduloActual < $modulo) {
                    $pdf->SetFillColor(0, 0, 0);
                    $pdf->SetTextColor(255);
                    $pdf->Cell($w[0] + $w[1] + $w[2] + $w[3] + $w[4] + $w[5] + $w[6], 6, 'Módulo: ' . $modulo, 'LR', 0, 'L', 1);
                    $pdf->Ln();
                    $moduloActual = $modulo;
                    $pdf->SetFillColor(224, 235, 255);
                    $pdf->SetTextColor(0);
                }


                $nombreUnidadOrigen = $unidadOrigen !== null ? $unidadOrigen->getNombre() : '';
                $nombreUnidadDestino = $unidadDestino !== null ? $unidadDestino->getNombre() : '';
                $numeroCreditos = $unidadOrigen !== null ? number_format($unidadOrigen->getNumeroCreditos()) : '';
                $calificacion = $registroHomologacion->getCalificacion() !== null ? number_format($registroHomologacion->getCalificacion()) : '';
                $porcentaje = $registroHomologacion->getPorcentajeCumplimiento() !== null ? number_format($registroHomologacion->getPorcentajeCumplimiento()) : '';
                $homologar = $registroHomologacion->getPorcentajeCumplimiento() >= 80 ? 'SI' : 'NO';
                $observaciones = $registroHomologacion->getObservacion() ? $registroHomologacion->getObservacion() : '';

                $pdf->Cell($w[0], 6, $nombreUnidadDestino, 'LR', 0, 'L', $fill);
                $pdf->Cell($w[1], 6, $nombreUnidadOrigen, 'LR', 0, 'L', $fill);
                $pdf->Cell($w[2], 6, $numeroCreditos, 'LR', 0, 'R', $fill);
                $pdf->Cell($w[3], 6, $calificacion . ' / ' . $escalaMaxima, 'LR', 0, 'R', $fill);
                $pdf->Cell($w[4], 6, $porcentaje . ' %', 'LR', 0, 'C', $fill);
                $pdf->Cell($w[5], 6, $homologar, 'LR', 0, 'C', $fill);
                $pdf->Cell($w[6], 6, $observaciones, 'LR', 0, 'R', $fill);
                $pdf->Ln();
                $fill = !$fill;
            }
        }
        $pdf->Cell(array_sum($w), 0, '', 'T');
    }

    /**
     * Lists all peticionHomologacion entities.
     *
     * @Route("/{id}/pdf", name="pdf")
     * @Template()
     */
    public function pdfAction($id) {

        // create new PDF document
        $pdf = new \Tcpdf_Tcpdf();

        $this->setDocumentInformation($pdf);

        // add a page
        $pdf->AddPage('L', 'A4');
        $title = 'REPORTE DE HOMOLOGACION';
        $header = array('Malla carrera a ser admitido', 'Malla carrera procedencia', 'Créditos', 'Calificación', 'Porcentaje', 'Se reconoce', ' Observaciones');
        $em = $this->getDoctrine()->getEntityManager();
        $peticionHomologacion = $em->getRepository('UnlHomologacionBundle:PeticionHomologacion')->find($id);

        // print a block of text using Write()
        $pdf->Write($h = 0, $title, $link = '', $fill = 0, $align = 'C', $ln = true, $stretch = 0, $firstline = false, $firstblock = false, $maxh = 0);

        $this->setDatosUser($pdf, $peticionHomologacion);
        

        // Header
        $w = array(70, 70, 20, 20, 20, 20, 50);
        $pdf->SetFillColor(120, 120, 120);
        $pdf->SetTextColor(255);
        $pdf->SetDrawColor(0, 0, 0);
        $pdf->SetLineWidth(0.3);
        $pdf->SetFont('', 'B', 11);

        $num_headers = count($header);
        for ($i = 0; $i < $num_headers; ++$i) {
            $pdf->Cell($w[$i], 7, $header[$i], 1, 0, 'C', 1);
        }
        $pdf->Ln();
        // Color and font restoration
        $pdf->SetFillColor(255, 255, 255);
        $pdf->SetTextColor(0);
        // Data
        $pdf->SetFillColor(224, 235, 255);
        $this->setDatosTablaResultado($pdf, $peticionHomologacion);

        // set some text to print
        // ---------------------------------------------------------
        //Close and output PDF document
        $pdf->Output('homologacion.pdf', 'I');
    }

}
